一. Viterbi 演算法
因為若要一條條計算每個path的話會花許多時間,利用Dynamic Programming的方法通常會先將前一次狀態的結果存起來,再計算下一個狀態時,再將前一個狀態的結果取出來,可以降低時間複雜度。那如何保留前一個狀態的結果,下面我以前一篇的天氣當例子,當水草當天都為Dry時,哪種天氣組合的機率最大例子:
假設我們有HMM需要的三種矩陣:
初始狀態:
計算第二個Dry上半部分的狀態:
計算第二個Dry下半部分的狀態:
計算第三個Dry上半部分的狀態:
計算第三個Dry下半部分的狀態:
最後狀態回如下圖:
然後就完成了~~
上面的式子算到後面真的有點亂掉QQ~如果有覺得哪裡算得很怪可以再跟我說,我有空會看~
這邊也附上一個參考資訊[1],寫的真的非常詳細~也可以參考一下
明天將會利用python實現HMM+Viterbi 演算法來處理POS的任務~~
參考資訊
[1] Viterbi Algorithm